﻿using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Text;

namespace ThuVien
{
    public static class Lib
    {
        private static readonly string[] VietnameseSigns = new[]
                                                               {

                                                                   "aAeEoOuUiIdDyY",

                                                                   "áàạảãâấầậẩẫăắằặẳẵ",

                                                                   "ÁÀẠẢÃÂẤẦẬẨẪĂẮẰẶẲẴ",

                                                                   "éèẹẻẽêếềệểễ",

                                                                   "ÉÈẸẺẼÊẾỀỆỂỄ",

                                                                   "óòọỏõôốồộổỗơớờợởỡ",

                                                                   "ÓÒỌỎÕÔỐỒỘỔỖƠỚỜỢỞỠ",

                                                                   "úùụủũưứừựửữ",

                                                                   "ÚÙỤỦŨƯỨỪỰỬỮ",

                                                                   "íìịỉĩ",

                                                                   "ÍÌỊỈĨ",

                                                                   "đ",

                                                                   "Đ",

                                                                   "ýỳỵỷỹ",

                                                                   "ÝỲỴỶỸ"
                                                               };
        public static string RemoveSign4VietnameseString(this string str)
        {

            for (int i = 1; i < VietnameseSigns.Length; i++)
            {

                for (int j = 0; j < VietnameseSigns[i].Length; j++)

                    str = str.Replace(VietnameseSigns[i][j], VietnameseSigns[0][i - 1]);

            }

            return str;

        }
        /// <summary>
        /// Dinh dang hien thi tien te
        /// </summary>
        /// <param name="money"></param>
        /// <param name="stFormat"></param>
        /// <returns></returns>
        /// 
     public static string RandomString(int size, bool lowerCase)
        {
            var sb = new StringBuilder();
            char c;
            Random rand = new Random();
            for (int i = 0; i < size; i++)
            {
                c = Convert.ToChar(Convert.ToInt32(rand.Next(65,87)));
                sb.Append(c);
            }
            if (lowerCase)
                return sb.ToString().ToLower();
            return sb.ToString();
            
        }
        public static string GetFormatMoney(object money, string stFormat)
        {
            var stb = new StringBuilder(money.ToString());
            string st;
            var j = 0;
            if (stb.Length % 3 != 0)
            {
                for (var i = stb.Length - 1; i >= 0; i--)
                {
                    j++;
                    if (j % 3 == 0)
                    {
                        stb.Insert(i, stFormat);
                        j = 0;
                    }
                }

            }
            else
            {
                for (var i = stb.Length - 1; i > 0; i--)
                {
                    j++;
                    if (j % 3 == 0)
                    {
                        stb.Insert(i, stFormat);
                        j = 0;

                    }
                }

            }

            st = stb.ToString();
            return st;
        }

        public static string RemoveSpecialCharacters(string st)
        {
            var d=new[]{'#', '%', '{', '}', '+','/','\'',';','`','~','?','^','<','>','(',')','"'};
            var stringBuilder=new StringBuilder(st);
            foreach (var s in d)
            {
                stringBuilder.Replace(s,'-');
            }
            return stringBuilder.ToString();
        }

        public static string AlertJS(this string t)
        {
            return "<script type=\"text/javascript\"> alert(\"" + t + "\"); </script>";
        }

        public static bool IsValidEmail(this string email)
        {
            return System.Text.RegularExpressions.Regex.IsMatch(email, @"^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$");
        }

        //validate Number is Integer
        public static bool IsValidInt(string val)
        {
            return System.Text.RegularExpressions.Regex.IsMatch(val, @"^[1-9]\d*\.?[0]*$");
        }
        //kiểm tra chuỗi nhập vào rỗng hoặc quá độ dài cho phép
        public static bool ValidString(string s, int n)
        {
            if ((s == "") || (s.Length > n))
            {
                return false;
            }
            return true;
        }

        //validate DateTime
        public static bool IsDate(object attemptedDate)
        {
            bool Success = false;
            try
            {
                DateTime dtParse = DateTime.Parse(attemptedDate.ToString());
                Success = true; // If this line is reached, no exception was thrown
            }
            catch
            {
                Success = false; // If this line is reached, an exception was thrown
            }
            return Success;
        }


        //Trả về chuỗi ngày tháng hiện tại của hệ thống
        public static string taongay()
        {
            string ngay = "";
            string str = Convert.ToString(DateTime.Now);
            const char ch = '/';
            string[] st = CatChuoi(str, ch);
            if (st[1].Length == 1)
            {
                st[1] = "0" + st[1];
            }
            if (st[0].Length == 1)
            {
                st[0] = "0" + st[0];
            }
            ngay = st[1] + "/" + st[0] + "/" + st[2].Substring(0, 4);
            return ngay;
        }

        //Trả về chuỗi ngày tháng hiện tại của hệ thống
        public static string ngay_thang_nam()
        {
            var thangnam = "";
            var ngay = Convert.ToString(DateTime.Now.Day);
            var thang = Convert.ToString(DateTime.Now.Month);
            var nam = Convert.ToString(DateTime.Now.Year);
            if (ngay.Length == 1)
            {
                ngay = "0" + ngay;
            }
            if (thang.Length == 1)
            {
                thang = "0" + thang;
            }
            if (nam.Length == 1)
            {
                nam = "0" + nam;
            }
            thangnam = ngay + "/" + thang + "/" + nam;
            return thangnam;
        }

        //Trả về thứ trong tuần
        public static string GetThuTrongTuan()
        {
            string get = Convert.ToString(DateTime.Now.DayOfWeek);
            switch (get)
            {
                case "Sunday":
                    get = "Chủ Nhật";
                    break;
                case "Monday":
                    get = "Thứ hai";
                    break;
                case "Tuesday":
                    get = "Thứ ba";
                    break;
                case "Wednesday":
                    get = "Thứ tư";
                    break;
                case "Thursday":
                    get = "Thứ năm";
                    break;
                case "Friday":
                    get = "Thứ sáu";
                    break;
                case "Saturday":
                    get = "Thứ bảy";
                    break;

            }
            return get;
        }

        /// <summary>
        /// Trả về null nếu trường ko có giá trị
        /// </summary>
        /// <param name="t">chuỗi kiểm tra</param>
        /// <returns>Trả về null nếu trường ko có giá trị</returns>
        public static string CheckEmptyToNull(string t)
        {
            return string.IsNullOrEmpty(t.Trim()) ? null : t.Trim();
        }

        //hàm tách xâu
        //obj doi tuong muon tach
        //ch mang khi gap se tach
        public static Func<object, char, string[]> CatChuoi = (obj, ch) => obj.ToString().Split(ch);

        //Chuyển đổi kiểu ngày tháng -> chuỗi
        public static string ConvertStringToDateFormat(this string t)
        {
            try
            {
                var dt = Convert.ToDateTime(t);
                var thoigian = string.Format("{0:MM/dd/yyyy}", dt);
                return thoigian;
            }
            catch (Exception)
            {
                throw new Exception("Kiểu thời gian nhập không hợp lệ!");
            }
        }

        public static string ReplaceStringToShort(this string chuoi, int dodai)
        {
            if (chuoi.Length >= dodai)
            {
                string[] tr = chuoi.Split(' ');
                var stringBuilder = new StringBuilder();
                foreach (var s in tr)
                {
                    if (stringBuilder.Length >= dodai)
                    {
                        return stringBuilder.Append("..").ToString();
                    }
                    stringBuilder.Append(" " + s);
                }
            }
            return chuoi;
        }
        public static string[] split(object obj, char[] ch)
        {
            string st = obj.ToString();
            return st.Split(ch);
        }
        public static double giamgia(double gia, int khuyenmai)
        {
            return (gia*khuyenmai)/100;
        }

        public static string ThayUrl(object s)
        {
            return ConvertKhongdau((string) s).Replace(' ', '-') + ".html";
        }

        public static string ConvertToCateNews(string input)
        {
            string input1 = input.Substring(0, 1).ToUpper() + input.Substring(1).ToLower();
            return ConvertKhongdau(input1).Replace(' ', '-');
        }

        public static string RewriteUrlDaKoDau(string chuoi, decimal idTin,string cate)
        {
            return String.Format("/{2}/{1}/{0}.html", (RemoveSpecialCharacters(chuoi)).Replace(' ', '-'), idTin,ConvertToCateNews(cate));
        }

        private static string ConvertKhongdau(string text)
        {
            for (int i = 33; i < 35; i++)
            {
                text = text.Replace(((char) i).ToString(), "");
            }
            for (int i = 36; i < 44; i++)
            {
                text = text.Replace(((char) i).ToString(), "");
            }
            for (int i = 45; i < 48; i++)
            {
                text = text.Replace(((char) i).ToString(), "");
            }

            for (int i = 58; i < 65; i++)
            {
                text = text.Replace(((char) i).ToString(), "");
            }

            for (int i = 91; i < 97; i++)
            {
                text = text.Replace(((char) i).ToString(), "");
            }

            for (int i = 123; i < 127; i++)
            {
                text = text.Replace(((char) i).ToString(), "");
            }

            text = text.Replace(" ", " ");

            Regex regex = new Regex(@"\p{IsCombiningDiacriticalMarks}+");

            string strFormD = text.Normalize(System.Text.NormalizationForm.FormD);
            return regex.Replace(strFormD, String.Empty).Replace('\u0111', 'd').Replace('\u0110', 'D');
        }

    }
    
    public static class TuanVA
    {
        public static bool CheckNullAndDefaultValue(string inputText, string defaultValue=null)
        {
            if(defaultValue==null)
            {
                return !String.IsNullOrEmpty(inputText);
            }
            return !String.IsNullOrEmpty(inputText) && inputText != defaultValue;
        }

        public static string ConvertToTitle(string input)
        {
            return input.Substring(0, 1).ToUpper() + input.Substring(1).ToLower();
        }
    }
}